package com.himooc.jdk8.lambda;

import org.junit.Test;

import com.himooc.jdk8.common.Action;

/**
 * JDK8 Lambda表达式学习
 * 
 * @author David Chen
 *
 */
public class TestLambda {
	
	/**
	 * 测试内部类的Runable接口
	 */
	@Test
	public void testInnerClassRunnable() {
		new Runnable() {
			
			@Override
			public void run() {
				System.out.println("匿名内部类实现Runnable接口");
			}
			
		}.run();;
	}
	
	/**
	 * 测试使用Lambda表达式实现Runnable
	 */
	@Test
	public void testLambdaRunnable() {
		int i = 10;
		Runnable r = () -> {
			System.out.println("用Lambda表达式实现Runnable接口");
			System.out.println("直接使用外部普通变量i: " + i);
			// i ++; 不能修改
		};
		r.run();
	}
	
	// ====================================================
	
	/**
	 * 测试使用匿名内部类实现带参数的方法接口
	 */
	@Test
	public void testInnerClassParam() {
		new Action() {
			
			@Override
			public void execute(String content) {
				System.out.println("参数为： " + content);
			}
			
		}.execute("匿名内部类实现带参数的方法");
	}
	
	/**
	 * 测试使用Lambda实现带参数的方法
	 */
	@Test
	public void testLambdParam() {
		Action action = (String content) -> {
			System.out.println("参数为： " + content);
		};
		action.execute("Lambda实现带参数的方法");
	}
	
}
